package Day_0215.JVM;

/**
 * @author zxc
 * @date 2023/02/15 20:33
 **/
public class Heap_Stack_Difference {
    public static void main(String[] args) {
        /**
         * JVM虚拟机中，堆和栈之间的区别
         * ===》
         * 1.物理地址
         * （1）堆的物理地址分配是不连续的。
         * ===》因此，堆的性能慢些。
         *  在GC的时候也要考虑到不连续的分配，所以有各种算法。
         *  比如，标记-消除，复制，标记-压缩，分代（即新生代使用复制算法，老年代使用标记——压缩）
         * （2）栈使用的是数据结构中的栈，先进后出的原则，物理地址分配是连续的。
         * ===》所以，栈的性能比较快。
         *
         * 2.内存分别
         * （1）堆因为是不连续的，所以分配的内存是在（运行期）确认的，因此大小不固定。一般堆大小远远大于栈。
         * （2）栈是连续的，所以分配的内存大小要在（编译期）就确认，大小是固定的。
         *
         * 3.存放的内容
         * （1）堆存放的是对象的实例和数组。
         * ===》因此该区更关注的是，数据的存储
         * （2）栈存放：局部变量，操作数栈，返回结果。
         * ===》该区更关注的是，程序方法的执行。
         *
         * 4.程序的可见度
         * （1）堆，对于整个应用程序都是共享、可见的。
         * （2）栈只对于线程是可见的。
         * ===》所以也是线程私有。
         * 栈的生命周期和线程相同。
         *
         */
    }
}
